/*new做了什么
1.创建一个空对象
2.将构造函数的prototype属性赋值给新对象的__proto__
3.将构造函数的this指向新对象
4.执行构造函数的代码
5.把新对象返回
var catA=new CreateCat();
var catB=(function(){
   var obj={};
obj.__proto__=CreateCat.prototype;
CreateCat.call(obj,'xiaoB');
return obj;
})();
*/
//new 和不是new的区别

function Fn(age){
    this.name="kevin";
    this.age=age;
}

var a=Fn();//执行函数，并且把值保存在变量a
var b=new Fn();//声明为对象，并且有prototype
var c=Fn;//保存了函数在变量c
console.log(a);//undefined
//console.log(a());//a is not a function
console.log(b);//{name:kevin}
console.log(c);//是个函数,如果需要执行则



// 相当于 let test=new Fn(100)
let test=(function(){
    var obj={}
    obj.__proto__=Fn.prototype;
    Fn.call(obj,...arguments)
    return obj
})(100)

console.log(test)